set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

If exists(select 1 from sysobjects where xtype = 'P' and name = 'Cotizacion_Save')
Begin
   Drop proc Cotizacion_Save
End

GO

CREATE    Proc [dbo].[Cotizacion_Save]
	(@Emp_Id smallint,
	 @Cotizacion_Id int OUT,
	 @Cliente_Id int,
	 @Usuario_Id varchar(30),
	 @Vendedor_Id int,
	 @Material_Id int,
	 @Linea_Id int,	 
	 @Cotizacion_PrecioUnitario float,
	 @Cotizacion_Subtotal float,
	 @Cotizacion_Porcentaje float,
	 @Cotizacion_TotalUSD float,
	 @Cotizacion_TotalCol float,
	 @Cotizacion_Cantidad float,
	 @Cotizacion_Montaje float,
	 @Cotizacion_Base float,
	 @Cotizacion_Altura float,
	 @Cotizacion_Tintas float,
	 @Cotizacion_Cubrimiento float,
	 @Cotizacion_Troquel float,
	 @Cotizacion_Doblez float,
	 @Cotizacion_Cuatricromia float,
	 @Cotizacion_Otro float,
	 @Cotizacion_Evento varchar(2),
	 @Cotizacion_PorcEvento float,
	 @Num_Pedido varchar(20),
	 @Precio_Material float,
	 @Precio_Tintas float,
	 @Precio_Arte float,
	 @Precio_Impresion float,
	 @Precio_Molde float,
	 @Precio_Corte float,
	 @Precio_Positivo float,
	 @Precio_Solvente float,
	 @Cotizacion_Rendimiento float,
	 @Cotizacion_Laminas float,
	 @Cotizacion_Obs varchar(500),
	 @Tipo_Cambio float,
	 @Cotizacion_DivLargo float,
	 @Cotizacion_DivAncho float,
	 @Create_Copy bit) AS

Begin
	Set nocount on
	
	DECLARE @FecActual AS DATETIME	
	DECLARE @FecAplicada AS DATETIME
	DECLARE @CotizacionAplicada AS BIT
	DECLARE @Orden_Id AS INT
	
	SET @FecActual = GETDATE()

	If 	Exists(Select 1 from Cotizacion Where Emp_Id = @Emp_Id and Cotizacion_Id = @Cotizacion_Id)
		AND @Create_Copy = 0
	Begin		
		Update Cotizacion
		Set  Cliente_Id = @Cliente_Id,
			 Usuario_Id = @Usuario_Id,
			 Vendedor_Id = @Vendedor_Id,
			 Material_Id = @Material_Id,
			 Linea_Id = @Linea_Id,
			 Cotizacion_Fecha = @FecActual,
			 Cotizacion_PrecioUnitario = @Cotizacion_PrecioUnitario,
			 Cotizacion_Subtotal = @Cotizacion_Subtotal,
			 Cotizacion_Porcentaje = @Cotizacion_Porcentaje,
			 Cotizacion_TotalUSD = @Cotizacion_TotalUSD,
			 Cotizacion_TotalCol = @Cotizacion_TotalCol,
			 Cotizacion_Cantidad = @Cotizacion_Cantidad,
			 Cotizacion_Montaje = @Cotizacion_Montaje,
			 Cotizacion_Base = @Cotizacion_Base,
			 Cotizacion_Altura = @Cotizacion_Altura,
			 Cotizacion_Tintas = @Cotizacion_Tintas,
			 Cotizacion_Cubrimiento = @Cotizacion_Cubrimiento,
			 Cotizacion_Troquel = @Cotizacion_Troquel,
			 Cotizacion_Doblez = @Cotizacion_Doblez,
			 Cotizacion_Cuatricromia = @Cotizacion_Cuatricromia,
			 Cotizacion_Otro = @Cotizacion_Otro,
			 Cotizacion_Evento = @Cotizacion_Evento,
			 Cotizacion_PorcEvento = @Cotizacion_PorcEvento,
			 Num_Pedido = @Num_Pedido,
			 Precio_Material = @Precio_Material,
			 Precio_Tintas = @Precio_Tintas,
			 Precio_Arte = @Precio_Arte,
			 Precio_Impresion = @Precio_Impresion,
			 Precio_Molde = @Precio_Molde,
			 Precio_Corte = @Precio_Corte,
			 Precio_Positivo = @Precio_Positivo,
			 Precio_Solvente = @Precio_Solvente,
			 Cotizacion_Rendimiento = @Cotizacion_Rendimiento,
			 Cotizacion_Laminas = @Cotizacion_Laminas,
			 Cotizacion_Observacion = @Cotizacion_Obs,
			 Tipo_Cambio = @Tipo_Cambio,
			 Cotizacion_DivLargo = @Cotizacion_DivLargo,
			 Cotizacion_DivAncho = @Cotizacion_DivAncho,
			 Cotizacion_Aplicada = CASE WHEN @Num_Pedido IS NULL THEN 0 ELSE 1 END,
			 Cotizacion_FecAplicada = CASE WHEN @Num_Pedido IS NULL THEN NULL ELSE @FecActual END
		Where Emp_Id = @Emp_Id
		  and Cotizacion_Id = @Cotizacion_Id		
		  		 
		Select @Orden_Id = isnull(max(Orden_Id),0)+1
        From Orden 
        Where Emp_Id = @Emp_Id 
				
		-- Si es una aplicacion de Cotizacion se crea entrada en tabla de Pedidos
		IF (@Num_Pedido IS NOT NULL)		
		Begin
			INSERT INTO Orden
				(Emp_id, Orden_id, Cotizacion_id, Num_Pedido, Fec_Inicio, Fec_Final)
			VALUES
				(@Emp_Id, @Orden_Id, @Cotizacion_Id, @Num_Pedido, @FecActual, NULL)
		End
	End
	Else
	Begin
		Select @Cotizacion_Id = isnull(max(Cotizacion_Id),0)+1
        From Cotizacion 
        Where Emp_Id = @Emp_Id
        
        -- En ambos casos, cuando es copia o una nueva cotizacion, no deben tener # de pedido asociado
        IF (@Create_Copy = 1)        
			SELECT @Num_Pedido = NULL, @CotizacionAplicada = 0, @FecAplicada = NULL      
		
		Insert into Cotizacion
			(Emp_Id,Cotizacion_Id,Cliente_Id,Usuario_Id,Vendedor_Id,Material_Id,Linea_Id,
			 Cotizacion_Fecha,Cotizacion_PrecioUnitario,Cotizacion_Subtotal,Cotizacion_Porcentaje,
			 Cotizacion_TotalUSD,Cotizacion_TotalCol,Cotizacion_Cantidad,Cotizacion_Montaje,
			 Cotizacion_Base,Cotizacion_Altura,Cotizacion_Tintas,Cotizacion_Cubrimiento,Cotizacion_Troquel,
			 Cotizacion_Doblez,Cotizacion_Cuatricromia,Cotizacion_Otro,Cotizacion_Evento,Cotizacion_PorcEvento,
			 Cotizacion_Aplicada,Cotizacion_FecAplicada,Cotizacion_FecRegistro,Num_Pedido,Precio_Material,
			 Precio_Tintas,Precio_Arte,Precio_Impresion,Precio_Molde,Precio_Corte,Precio_Positivo,Precio_Solvente,
			 Cotizacion_Rendimiento,Cotizacion_Laminas,Cotizacion_Observacion,Tipo_Cambio,Cotizacion_DivLargo,
			 Cotizacion_DivAncho)
		Values
			(@Emp_Id,@Cotizacion_Id,@Cliente_Id,@Usuario_Id,@Vendedor_Id,@Material_Id,@Linea_Id,
			 @FecActual,@Cotizacion_PrecioUnitario,@Cotizacion_Subtotal,@Cotizacion_Porcentaje,
			 @Cotizacion_TotalUSD,@Cotizacion_TotalCol,@Cotizacion_Cantidad,@Cotizacion_Montaje,
			 @Cotizacion_Base,@Cotizacion_Altura,@Cotizacion_Tintas,@Cotizacion_Cubrimiento,@Cotizacion_Troquel,
			 @Cotizacion_Doblez,@Cotizacion_Cuatricromia,@Cotizacion_Otro,@Cotizacion_Evento,@Cotizacion_PorcEvento,
			 @CotizacionAplicada, @FecAplicada, @FecActual, @Num_Pedido, @Precio_Material,
			 @Precio_Tintas,@Precio_Arte,@Precio_Impresion,@Precio_Molde,@Precio_Corte,@Precio_Positivo,@Precio_Solvente,
			 @Cotizacion_Rendimiento,@Cotizacion_Laminas,@Cotizacion_Obs,@Tipo_Cambio,@Cotizacion_DivLargo,
			 @Cotizacion_DivAncho)
	End

	Set nocount on
End
 